package ip4util

import (
	"math/rand"
	"net"
	"time"
)

// NewRandIPInNet 在一个子网中随机生成一个IP地址
func NewRandIPInNet(ipNet net.IPNet) net.IP {
	rand.Seed(time.Now().UnixNano())

	ones, bits := ipNet.Mask.Size()
	if ones >= bits {
		return ipNet.IP
	}

	// 网络地址
	ip := ipNet.IP.To4()
	netInt := IP2Int(ip) >> (bits - ones) << (bits - ones)

	// 主机地址数量，减去最后一个网络地址和第一个网络地址
	hostNum := 1<<(bits-ones) - 2
	if hostNum <= 0 {
		return ipNet.IP
	}
	// 第一个是网络地址
	return Int2IP(netInt + 1 + rand.Intn(hostNum-1))
}
